#ifndef __M_UTIL_H_  //防止头文件的重复包含
#define __M_UTIL_H_
/*实用工具的实现:
    1.获取系统时间
    2.判断文件是否存在
    3.判断文件所在路径
    4.创建目录
*/

#include<iostream>
#include<ctime>
#include <unistd.h>
#include<sys/stat.h>

namespace bitlog
{
    namespace util{
        class Date{
            public :
                static size_t now()      //静态成员接口，以便于直接使用不用去实例化对象
                {
                    return (size_t)time(nullptr);
                }    
        };
        class File{
            public:
            static bool exists(const std::string &pathname)//文件是否存在
            {
                struct stat st;
                if(stat(pathname.c_str(),&st)<0)
                {
                    return false;
                }
                return true;
            }
            static std::string path(const std::string &pathname)//获取文件所在路径
            {
                size_t pos=pathname.find_last_of("/\\");
                if(pos==std::string::npos)return ".";
                return pathname.substr(0,pos+1);      //截取数据长度

            }
            static void createDirectory(const std::string &pathname)//创建目录
            {
                // ./abc/bcd/cde
                size_t pos =0,idx=0;
                while(idx<pathname.size())
                {
                                    pos=pathname.find_first_of("/\\",idx);
                if(pos==std::string::npos)
                {
                    mkdir(pathname.c_str(),0777);
                }
                std::string parent_dir =pathname.substr(0,pos+1);

                if(exists(parent_dir)==true) {idx=pos+1;continue;}
                mkdir(parent_dir.c_str(),0777);
                idx=pos+1;
                }

            }
        };
    }
} 
#endif